package com.sl.transport.common.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 自动填充数据库实体的创建时间和更新时间。
 * 通过实现MetaObjectHandler接口，Mybatis-Plus在插入和更新数据时会调用这些方法来自动填充相应字段。
 */
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    /**
     * 在插入数据时自动填充创建时间和更新时间。
     *
     * @param metaObject Mybatis的元对象，用于反射字段并设置值。
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        Object created = getFieldValByName("created", metaObject);
        // 如果创建时间字段为空，则设置当前时间
        if (null == created) {
            //字段为空，可以进行填充
            setFieldValByName("created", LocalDateTime.now(), metaObject);
        }

        Object updated = getFieldValByName("updated", metaObject);
        // 如果更新时间字段为空，则设置当前时间
        if (null == updated) {
            //字段为空，可以进行填充
            setFieldValByName("updated", LocalDateTime.now(), metaObject);
        }
    }

    /**
     * 在更新数据时自动填充更新时间。
     *
     * @param metaObject Mybatis的元对象，用于反射字段并设置值。
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 更新数据时，直接更新字段
        setFieldValByName("updated", LocalDateTime.now(), metaObject);
    }
}
